{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'1.14.0'"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tf.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from tensorflow.examples.tutorials.mnist import input_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-9-8ef614dae8f3>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From /home/xiaoao/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From /home/xiaoao/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/base.py:252: _internal_retry.<locals>.wrap.<locals>.wrapped_fn (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use urllib or similar directly.\n",
      "Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.\n",
      "WARNING:tensorflow:From /home/xiaoao/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.\n",
      "WARNING:tensorflow:From /home/xiaoao/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From /home/xiaoao/.local/lib/python3.6/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "可以看到images里面有数量不等（55000）的图片，每张图片是28x28长度的一个一维向量， 所以用的时候需要先给它还原成28x28的二维图片。labels中则是图片对应的数字的值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里应该是一个灰度图，怎么是黄色？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来，定义用于训练的网络，首先定义网络的输入。\n",
    "\n",
    "这里我们直接使用上面的数据作为输入，所以定义两个placeholder分别用于图像和lable数据，另外，定义一个float类型的变量用于设置学习率。\n",
    "\n",
    "为了让网络更高效的运行，多个数据会被组织成一个batch送入网络，两个placeholder的第一个维度就是batchsize，因为我们这里还没有确定batchsize，所以第一个维度留空。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def initialize(shape, stddev=0.1):#stddev标准偏差\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.761446, the validation accuracy is 0.8502\n",
      "after 200 training steps, the loss is 0.541057, the validation accuracy is 0.8894\n",
      "after 300 training steps, the loss is 0.374212, the validation accuracy is 0.9214\n",
      "after 400 training steps, the loss is 0.309009, the validation accuracy is 0.9268\n",
      "after 500 training steps, the loss is 0.0882002, the validation accuracy is 0.9324\n",
      "after 600 training steps, the loss is 0.134767, the validation accuracy is 0.9366\n",
      "WARNING:tensorflow:From /home/xiaoao/.local/lib/python3.6/site-packages/tensorflow/python/training/saver.py:960: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n",
      "after 700 training steps, the loss is 0.117073, the validation accuracy is 0.9434\n",
      "after 800 training steps, the loss is 0.0952519, the validation accuracy is 0.9492\n",
      "after 900 training steps, the loss is 0.233019, the validation accuracy is 0.9498\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9538\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /home/xiaoao/.local/lib/python3.6/site-packages/tensorflow/python/training/saver.py:1276: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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DyA7Wvva5WybZxvMPvuoVLVvSTT+UNvw6xHR2YS8Z679UgwLybMdZod3d0l9seNclyy77ltgTnUu8TqxTRPyNyhwfcrKv/LennvCNgpzzsVmAH/Gmb+NXeetAM6Nkedw20mtB3B0Sa9jKttX7BuJiIgoCt4UnYiIKAQ7SiIiohDsKImIiEKEni7eJ20AJzBLyFd570a7/qvY2KYlJxltyvYsOdxG9zyx2pRHlERERCHYURIREYVgR0lERBSCHSUREVEIdpREREQh2FESERGFYEdJREQUgh0lERFRiCI/n46oOBbdc7AX51Z0r6+u13G1F//YxXncnKPV2PO8uNrkSk5agycnFreKREQAeERJREQUih0lERFRCHaUREREIThHSSmz7tM2Xvx716fjes/OkNtDz+n9she/uX8jJ+1/X/X04tzZ8+OsIZUW0q2js/zpR294cefnL/fiZndzLrokpNes4cVzn97Li4PbJAAMXdXNi38b2NZJy501L0m1SzweURIREYVgR0lERBSCQ6+UNMGhVgD4oes7cb3v+fX+UM6jP/bx4uwWq518X3Z4z4sHVlvupN17bl0v3us/HHota1YdUN1Z3oVcL678Nx/XWNLyWjb14t96veDFkVMl99Sf5sVdTj7ESWvGoVciIqI9AztKIiKiEBx6pYTadaR/ltvYLs9EpGZ60ePr/DPgxp2xv5vt71Ve2HbdVC9Oq1jRyXbfpM5efHPd39x61NoVd52p9Fm3T66zvHRXjhfXeeXHVFen3Mto1tRZbvniHyVUk5LBI0oiIqIQ7CiJiIhCsKMkIiIKkdI5yrUXHewsNx/kj3PPWdXASduR489nNXnbjysv3ezky5s+K5FVpGLa3KSCF6dF/A4LzkuOP8GfX8xdMDeusv+4c19n+a3ajwSWspy0pmP4G7Cs0R5dvfj74x910np+d4UXt8YvKatTebb4Nv9yjm7HuPvZhxp9X+jyqh7iXt615Fa//Loz/HMKKn04udBlJxv3JkRERCHYURIREYVI6dDrDUPecpZPrbLOX2gV8sZefrho11Yn6YnVvYtfsThNXtXCi6s8UsNJy/hmWmT2cqnm6/6p+6dNPdtJk3UbvXjX8kWFLvvCY792lqumZcXISWXRPx38h283Sq/spDUZlRmZnZJsxv895cU7NTckZ3zGd3nTfaGLH76/xX+owbBN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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
